
const redis = require('../../util/redis/redis');
const jwt = require('../../util/token/jwt.js');
const result= require('../../util/result/result.js');
const {daouser,daotittlechildsort,tittlefathersort,modeltoken}= require('../../dao/daoenter.js');

const getRandomString= require('../../util/radmonStr/radmonStr.js');




/* 
编辑用户
*/
const findandupdateuser=async(req,res)=>{
	
	let uid=req.body._id
	let obj={}
	obj.username=req.body.username
	obj.password=req.body.password


	try {
		let ca1=await daouser.findandupdateuserdao(uid,obj)
		if(ca1==null){
			res.send(result.result(false))
		}else{
			res.send(result.result(true))
		}
	} catch (error) {
		res.send(result.result(false))
	}
}


/* 
删除指定用户
入参:
	adminIDwhoDo  id  是谁删除的
	deletedUsers  [id1,id2,id3...]   被删除的用户id数组
*/
const deleteUsers=async(req,res)=>{
	
	let aa=req.body._id
	// console.log(aa,5435465);
	let ca1
	try {
		 ca1=await daouser.deleteUsersDao(aa)
	} catch (error) {
		res.send(result.result(false))
	}
	if(ca1==null){
		res.send(result.result(false))
	}else{
		res.send(result.result(true))
	}
}



/* 
token校验
这里只做token校验
*/
const ckeckToken=async(req,res)=>{

	// 前端根据code,来判断是否过期
	res.send(result.result(true))
}






/* 
分页查询用户
客户端参数
skip number 可空 跳过多少条数据
limit number 可空 查询多少条数据

*/
const queryUsers =async(req,res)=>{
	//todo 这里必须携带token,为了方便测试先跑通业务,暂时就后面做这个功能

	// todo 这里做一下数据校验和转换
	let ca1=Number(req.body.skip)
	let ca2=Number(req.body.limit)

	// todo 这里做一下异常处理

	// 获得查询到的数据
    let daoResult=await daouser.queryUsersdao(ca1,ca2)

	// 返回给客户端
	res.send(result.result(true,daoResult))
}



/* 注册 
前端参数：
username
password

特别说明
rolenum  0-没有身份  1-游客，2注册用户 3，vip会员   7-管理员  8-超级管理员  
*/
/* 注册账号 */
const cadduser =async(req,res)=>{
	let postdata=req.body

	if(postdata.username&&postdata.password){
		if(postdata.username.length===0||postdata.password.length===0){
			res.send(result.result(false))
		}else{
			//
			postdata.rolenum=2
			let uu=await daouser.dadduser(postdata)
			if(uu._id){
								/* 账号ID作为token参数 */
								let id =uu._id.toString();
								//把id和角色作为值保存到redis
								let yy={}
								yy.id=id
								yy.rolenum=postdata.rolenum
								

								/* 生成token */
								 let token = jwt.generateToken(id);
								/* 把生成的token保存到redis种 */
								/* 86400 秒 为1天 */
							await	redis.set(token, JSON.stringify(yy), '864000000', function(err,result){
									if (err) {
									console.log(err);
									return;
									}else{
									console.log('保存redis成功:', result);}
								})
		
								/* 把token，还有别的信息一起发送给前端 */
							//  res.send({code:200,msg:'success',token:token,id:id,username:uu.username});
							let resdata={}
							resdata.token=token
							resdata.id=id
							resdata.username=uu.username
							resdata.rolenum=uu.rolenum

							res.send(result.result(true,resdata))
			
			}else{
				res.send(result.result(false,'注册失败'))
				
			}
		}
	}else{
		res.send(result.result(false,'账号密码有误'))
	}
}



/* 登录 */
/* 特别说明
rolenum  0-没有身份  1-游客，2注册用户 3，vip会员   7-管理员  8-超级管理员  */
const cuserlogin =async (req,res)=>{



		/* 前端传来的账号密码 */
		let username=req.body.username
		let password=req.body.password
		/* 查询用户是否存在 */	
		let hahares=await daouser.dfindbyuser(username,password) 

		/* 如果查询到用户 */
		if(hahares){
			/* 如果账号密码匹配成功，则生成token */
					if(password==hahares.password){
						/* 查询到的账号ID作为token参数 */
						let id = hahares._id.toString();

						/* 生成token */
				 		let token = jwt.generateToken(id);
						console.log(hahares,443)

						 let yy={}
						 yy.id=id
						 hahares.hasOwnProperty('rolenum')?yy.rolenum=hahares.rolenum:yy.rolenum=0
						 console.log(yy)
						/* 把生成的token保存到redis种 */
						/* 86400 秒 为1天 */
						await redis.set(token, JSON.stringify(yy), '86400', function(err,result){
							if (err) {
							console.log(err);
							return;
							}else{
							console.log('保存redis成功:', result);}
						})

						let resdata={}
						resdata.token=token
						resdata.id=id
						resdata.username=hahares.username
						hahares.hasOwnProperty('rolenum')?resdata.rolenum=hahares.rolenum:resdata.rolenum=0
		
						res.send(result.result(true,resdata))
					}
		}else{
		res.send(result.result(false))
		}
}



/* 查询单个用户 */
const coneuser =async (req,res)=>{
let id=req.query.id
    let hahares=await daouser.doneuser(id)
	res.send(result.result(true,hahares))
}


/* 以游客身份一键注册 */
const youke =async (req,res)=>{
	/* 随机生成字符串为用户名 */
	/* 把随机生成得字符作为账号，密码统一为123，rolenum为1，封装保存起来 */
	let user={}
	let time=new Date().getTime()
	user.username='游客'+getRandomString()+time
	user.password=123
	user.rolenum=1
	let tt=await daouser.dadduser(user)

	//token操作
	if(tt._id){
		/* 账号ID作为token参数 */
		let id =tt._id.toString();
		//把id和角色作为值保存到redis
		let yy={}
		yy.id=id
		yy.rolenum=1
		

		/* 生成token */
		 let token = jwt.generateToken(id);
		/* 把生成的token保存到redis种 */
		/* 86400 秒 为1天 */
	  await	redis.set(token, JSON.stringify(yy), '86400', function(err,result){
			if (err) {
			console.log(err);
			return;
			}else{
			console.log('保存redis成功:', result);}
		})

	/* 把token，还有别的信息一起发送给前端 */
	let resdata={}
	resdata.token=token
	resdata.id=id
	resdata.username=tt.username
	resdata.rolenum=tt.rolenum
	res.send(result.result(true,resdata))

	}else{
	res.send(result.result(false,'注册失败'))
	}

}







module.exports={
cadduser,cuserlogin,coneuser,youke,queryUsers,ckeckToken
,deleteUsers,findandupdateuser
}
